package com.government.article.service;

import java.util.List;

import com.government.app.bo.KeywordSearchBO;
import com.government.app.bo.KeywordSearchDetailsBO;
import com.government.app.vo.KeywordSearchDetailsVO;
import com.government.app.vo.KeywordSearchVO;
import com.government.article.bo.ArticlePolicyBO;
import com.government.article.bo.NormalPolicyBO;
import com.government.article.domain.Article;
import com.government.article.domain.ArticlePolicy;
import com.government.article.vo.*;
import com.government.common.core.domain.BaseTreeVo;
import com.government.member.domain.UserPlan;
import com.government.system.domain.WebUrl;

/**
 * 政策分类信息Service接口
 *
 * @author system
 * @date 2023-09-20
 */
public interface IArticlePolicyService
{
    /**
     * 查询政策分类信息
     *
     * @param articleId 政策分类信息主键
     * @return 政策分类信息
     */
    public ArticlePolicyVO selectArticlePolicyByArticleId(Long articleId);

    /**
     * 查询政策分类信息列表
     *
     * @return 政策分类信息集合
     */
    List<ArticlePolicyVO> selectArticlePolicyList(ArticlePolicyBO bo);

    /**
     * 查询所有政策
     *
     * @return 政策分类信息集合
     */
    List<AllPolicyVO> selectAllPolicy();

    /**
     * 查询所有政策
     *
     * @return 政策分类信息集合
     */
    List<BaseTreeVo> selectPolicyTree();

    /**
     * 查询政策分类信息列表
     *
     * @return 政策分类信息集合
     */
    List<KeywordSearchVO> searchArticlePolicyList(KeywordSearchBO bo);

    /**
     * 查询政策分类详情
     *
     * @return 政策分类信息集合
     */
    KeywordSearchDetailsVO selectArticlePolicyDetails(KeywordSearchDetailsBO bo);

    /**
     * 新增政策分类信息
     *
     * @param articlePolicy 政策分类信息
     * @return 结果
     */
    public int insertArticlePolicy(ArticlePolicyBO bo);

    /**
     * 修改政策分类信息
     *
     * @param articlePolicy 政策分类信息
     * @return 结果
     */
    public int updateArticlePolicy(ArticlePolicyBO bo);

    /**
     * 删除政策分类信息信息
     *
     * @param articleId 政策分类信息主键
     * @return 结果
     */
    public void deleteArticlePolicyByArticleId(Long[] articleId);

    /**
     * 复制政策分类信息信息
     *
     * @param articleId 政策分类信息主键
     * @return 结果
     */
    void copyArticlePolicyByArticleId(Long articleId);

    /**
     * 根据资讯id查找所属政策树
     * @param articleId
     * @return
     */
    List<PolicyTreeVO> getRelationPolicy(Long articleId);

    /**
     * 根据政策id查找所属政策树
     * @param policyId
     * @return
     */
    List<PolicyTreeVO> getParentPolicy(Long policyId);

    /**
     * 查询所有政策
     *
     * @return 政策分类信息集合
     */
    NormalPolicyVO normalPolicy(NormalPolicyBO bo);


    /**
     * 根据政策id查找关联政策树
     * @param policyId
     * @return
     */
    List<BaseTreeVo> findPolicyRel(Long policyId);

    /**
     * 根据政策id查找管理政策树
     * @param policyId
     * @return
     */
    List<BaseTreeVo> findPolicyManageRel(Long policyId);

    /**
     * 根据政策id查找演变政策
     * @param policyId
     * @return
     */
    List<List<EvolutionVO>> findPolicyEvolutionRel(Long policyId);

    List<UserPlan> getUserPlan();

    UserPlan getUserPlanDetail(Long id);

    List<WebUrl> getWebUrlList();

    Long saveUserPlan(UserPlan userPlan);

}
